1 using System.Collections;
2 using
ProceduralToolkit.Examples.UI;
3 using
UnityEngine;
4
5 namespace
ProceduralToolkit.Examples
6 {
7     
public class BoidControllerConfigurator : ConfiguratorBase
8     {
9         
public MeshFilter meshFilter;
10         
public RectTransform leftPanel;
11         
public BoidController.Config config = new BoidController.Config();
12
13         
private BoidController controller;
14         
private bool simulate = true;
15
16         
private void Awake()
17         {
18             Generate();
19             SetupSkyboxAndPalette();
20             StartCoroutine(Simulate());
21
22             InstantiateControl<SliderControl>(leftPanel).Initialize(
"Max speed", 0, 30,
23                 
value: (int) config.maxSpeed,
24                 onValueChanged:
value => config.maxSpeed = value);
25
26             InstantiateControl<SliderControl>(leftPanel).Initialize(
"Interaction radius", 0, 30,
27                 
value: (int) config.interactionRadius,
28                 onValueChanged:
value => config.interactionRadius = value);
29
30             InstantiateControl<SliderControl>(leftPanel).Initialize(
"Cohesion coefficient", 0, 30,
31                 
value: (int) config.cohesionCoefficient,
32                 onValueChanged:
value => config.cohesionCoefficient = value);
33
34             InstantiateControl<SliderControl>(leftPanel).Initialize(
"Separation distance", 0, 30,
35                 
value: (int) config.separationDistance,
36                 onValueChanged:
value => config.separationDistance = value);
37
38             InstantiateControl<SliderControl>(leftPanel).Initialize(
"Separation coefficient", 0, 30,
39                 
value: (int) config.separationCoefficient,
40                 onValueChanged:
value => config.separationCoefficient = value);
41
42             InstantiateControl<SliderControl>(leftPanel).Initialize(
"Alignment coefficient", 0, 30,
43                 
value: (int) config.alignmentCoefficient,
44                 onValueChanged:
value => config.alignmentCoefficient = value);
45
46             InstantiateControl<ToggleControl>(leftPanel).Initialize(
"Simulate", simulate, value => simulate = value);
47
48             InstantiateControl<ButtonControl>(leftPanel).Initialize(
"Generate", Generate);
49         }
50
51         
private IEnumerator Simulate()
52         {
53             
while (true)
54             {
55                 
yield return StartCoroutine(controller.CalculateVelocities());
56             }
57         }
58
59         
private void Update()
60         {
61             
if (simulate)
62             {
63                 controller.Update();
64             }
65             UpdateSkybox();
66         }
67
68         
private void Generate()
69         {
70             controller =
new BoidController();
71
72             GeneratePalette();
73             Color colorA = GetMainColorHSV().ToColor();
74             Color colorB = GetSecondaryColorHSV().ToColor();
75
76             config.template = MeshDraft.Tetrahedron(
0.3f);
77             
// Assuming that we are dealing with tetrahedron, first vertex should be boid's "nose"
78             config.template.colors.Add(colorA);
79             
for (int i = 1; i < config.template.vertexCount; i++)
80             {
81                 config.template.colors.Add(colorB);
82             }
83
84             meshFilter.mesh = controller.Generate(config);
85         }
86     }
87 }


Gõ tìm kiếm nhanh...